package com.atguigu.spzx.common.util;

import com.atguigu.spzx.model.entity.system.SysUser;
import com.atguigu.spzx.model.entity.user.UserInfo;

/**
 * 用于操作线程共享数据
 */
public class AuthContextUtil {

    private static ThreadLocal<SysUser> threadLocal = new ThreadLocal<>();
    private static ThreadLocal<UserInfo> userInfothreadLocal = new ThreadLocal<>();

    /**
     * 通过ThreadLocal往线程上绑定数据
     * @param sysUser
     */
    public static void set(SysUser sysUser){
        threadLocal.set(sysUser);
    }

    /**
     * 从线程上获取绑定的数据
     * @return 数据
     */
    public static SysUser get(){
        return threadLocal.get();
    }

    /**
     * 删除线程上绑定的数据。
     *  如果绑定数据使用完不删除，那么，线程归还线程池，线程不销毁，数据一直占用内存，影响性能。
     */
    public static void remove(){
        threadLocal.remove();
    }

    public static void setUserInfo(UserInfo userInfo){
        userInfothreadLocal.set(userInfo);
    }

    public static UserInfo getUserInfo(){
        return userInfothreadLocal.get();
    }

    public static void removeUserInfo(){
        userInfothreadLocal.remove();
    }
}
